Skip to content

Redesign Welcome page with Sentinel branding and Bootstrap layout#350

Merged
aurelianware merged 7 commits intomainfrom
copilot/update-welcome-page-design
Feb 10, 2026
Merged

Redesign Welcome page with Sentinel branding and Bootstrap layout#350
aurelianware merged 7 commits intomainfrom
copilot/update-welcome-page-design

Conversation

Copy link
Contributor

Copilot AI commented Feb 10, 2026

Welcome Page Redesign - Complete ✅

  • Review current Welcome.razor file structure
  • Update Welcome.razor with redesigned content (Bootstrap-based layout)
  • Update Welcome.razor.css to support redesigned layout with Sentinel branding
  • Fix corrupted Welcome.razor.css file
  • Build and test the portal application - Build successful
  • Add Bootstrap CSS to _Host.cshtml for proper styling
  • Run the portal and take screenshot of updated Welcome page
  • Fix failing CI checks (EDI validation for 276 transactions)
  • Fix failing Docker build checks (invalid tag format)
  • Update site assessment HTML from latest build
  • Apply code review feedback (branding compliance, security, UX)
  • Fix PHI validation check (replace real email with example.com)
  • Remove Calendly link per user request
  • Final review and completion

Summary of Changes

Files Modified:

  1. Welcome.razor - Replaced with Bootstrap-based design featuring Sentinel branding:

    • Hero section with Sentinel logo, absolute black background, and neon cyan/magenta gradients
    • Features section with 6 key EDI transaction features (corrected claim attachments text)
    • Testimonials section with dark obsidian cards, neon cyan borders, and glow effects
    • Signup section with email-only form (removed password field for security)
    • Added DataAnnotations validation with proper error messages
    • Email input with type="email" and autocomplete attributes
    • Removed Console.WriteLine to prevent PII leaks
    • SignupModel class with validation attributes in @code block
  2. Welcome.razor.css - Updated to match Sentinel branding guidelines:

    • Hero: Absolute black (#000000) background with subtle neon gradients
    • All headings use neon cyan (#00ffff) with glow text-shadow effects
    • Testimonials: Dark cards (#0a0a0a) with neon cyan borders and glow
    • Signup: Dark theme (#0a0a0a) with neon accents and form inputs styled with dark backgrounds
    • Removed purple gradient in favor of brand-compliant black with neon accents
  3. _Host.cshtml - Updated Bootstrap integration:

    • Added Bootstrap 5.3.0 CSS from CDN
    • Removed Bootstrap JS bundle (not needed - only using CSS for layout)
  4. scripts/validate-edi-x12.ps1 - Added support for 276 transaction type:

    • Added '276' = 'Claim Status Inquiry' to transaction types
    • Updated parameter validation to include 276
    • Updated error messages to include 276
  5. .github/workflows/docker-build.yml - Fixed Docker tag generation:

    • Changed type=sha,prefix={{branch}}- to type=sha,prefix=sha-
    • Prevents invalid tag format when branch variable is empty or contains special chars
    • Applied to all 4 build jobs (services, portal, site, utilities)
  6. site/assessment.html - Updated generated HTML:

    • Updated demo scheduling link to Calendly (then removed per user request)
    • Added target="_blank" rel="noopener noreferrer" to external links for security
    • Removed Calendly link from Schedule Demo section
  7. scripts/seed-demo-tenant.json - Fixed PHI validation:

    • Changed admin@demohealthplan.com to admin@example.com
    • Prevents PHI validation failures (example.com is whitelisted)
  8. package-lock.json - Updated npm dependency metadata

CI Fixes

1. EDI Validation Failure

Issue: The lint-and-test check failed because the EDI validator didn't support transaction type 276 (Claim Status Inquiry).

Fix: Added transaction type 276 support to scripts/validate-edi-x12.ps1.

2. Docker Build Failures

Issue: Docker builds failed with error: invalid tag "ghcr.io/aurelianware/cloudhealthoffice-member-service:-ad32f4b". The tag had a leading hyphen due to empty {{branch}} variable in PR context.

Fix: Changed SHA tag prefix from {{branch}}- to static sha- prefix in all docker-build.yml jobs.

3. PHI Validation Failure

Issue: The PHI redaction check failed because admin@demohealthplan.com in scripts/seed-demo-tenant.json was flagged as potential real PHI.

Fix: Changed email to admin@example.com (example.com is in the allowed domains list).

Code Review Improvements

Security & UX Enhancements:

  • ✅ Removed password field from signup form (not connected to real auth flow yet)
  • ✅ Added DataAnnotations validation with Required and EmailAddress attributes
  • ✅ Fixed email input to use type="email" with autocomplete attribute
  • ✅ Removed Console.WriteLine calls to prevent PII leaks in server logs
  • ✅ Fixed async method pattern (return Task.CompletedTask instead of async with no await)
  • ✅ Fixed PHI validation by using example.com domain for test data

Branding Compliance (Sentinel Theme):

  • ✅ Updated hero section to absolute black background with neon accents per docs/BRANDING-GUIDELINES.md
  • ✅ Added Sentinel logo to hero section with neon cyan glow effect
  • ✅ Updated testimonial cards to dark obsidian with neon cyan borders
  • ✅ Updated signup section to dark theme with neon form styling
  • ✅ All colors now comply with brand guidelines (absolute black backgrounds, neon cyan/green accents)

Content Corrections:

  • ✅ Fixed claim attachments feature text (removed incorrect 276 reference, now only 275)
  • ✅ Removed Calendly link per user request

Testing:

  • ✅ Build successful with no errors
  • ✅ Form validation working correctly with inline error messages
  • ✅ Visual preview confirmed all sections render with proper Sentinel branding
  • ✅ Bootstrap responsive layout working as expected
  • ✅ EDI validation now passes for 276 transactions
  • ✅ Site build generates valid HTML
  • ✅ Docker tag format now valid for all contexts
  • ✅ PHI validation check now passes

Screenshot

Updated Welcome Page with Sentinel Branding

The redesigned Welcome page now fully complies with the Sentinel brand identity, featuring absolute black backgrounds, neon cyan and green accents, proper form validation, and enhanced security practices.

Original prompt

Objective

Update the existing Welcome page (/portal/CloudHealthOffice.Portal/Pages/Welcome.razor) with a redesigned version to make it look nicer and more modern.

Current File Location

  • Path: portal/CloudHealthOffice.Portal/Pages/Welcome.razor
  • This is a Blazor Server app

Requirements

Replace the existing welcome page content with the following redesigned version:

@page "/welcome"

<!-- Hero Section -->
<section class="hero">
    <div class="container">
        <h1 class="display-4">Welcome to Cloud Health Office</h1>
        <p class="lead">Your Complete EDI Transaction Suite for Efficient Health Plan Management</p>
        <a href="#signup" class="btn btn-light btn-lg">Sign Up Now</a>
    </div>
</section>

<!-- Features Section -->
<section class="py-5">
    <div class="container">
        <h2 class="text-center mb-5">Our Key Features</h2>
        <div class="row">
            <div class="col-md-4 text-center">
                <div class="feature-icon">📋</div>
                <h4>Claims Processing</h4>
                <p>837 Professional & Institutional claims submission, 835 ERA processing, and real-time adjudication.</p>
            </div>
            <div class="col-md-4 text-center">
                <div class="feature-icon">✓</div>
                <h4>Eligibility Verification</h4>
                <p>270/271 real-time eligibility inquiries, benefit coverage details, and plan information.</p>
            </div>
            <div class="col-md-4 text-center">
                <div class="feature-icon">🔐</div>
                <h4>Prior Authorization</h4>
                <p>278 authorization requests and responses, automated workflow routing, and status tracking.</p>
            </div>
            <div class="col-md-4 text-center">
                <div class="feature-icon">📎</div>
                <h4>Claim Attachments</h4>
                <p>275/276/277 unsolicited and solicited attachments, FHIR integration, and automated delivery.</p>
            </div>
            <div class="col-md-4 text-center">
                <div class="feature-icon">👥</div>
                <h4>Member Enrollment</h4>
                <p>834 enrollment transactions, member demographics, coverage updates, and sponsor management.</p>
            </div>
            <div class="col-md-4 text-center">
                <div class="feature-icon">📊</div>
                <h4>Claim Status</h4>
                <p>276/277 claim status inquiries and responses, tracking, and reporting.</p>
            </div>
        </div>
    </div>
</section>

<!-- Testimonials Section -->
<section class="py-5 bg-light">
    <div class="container">
        <h2 class="text-center mb-5">Trusted by Leading Health Plans</h2>
        <div class="row">
            <div class="col-md-4">
                <div class="testimonial">
                    <p>"Reduced prior authorization turnaround from 12 days to under 2 minutes"</p>
                    <p><strong>— Regional Health Plan (450K members)</strong></p>
                </div>
            </div>
            <div class="col-md-4">
                <div class="testimonial">
                    <p>"Processing 2.3M claims/month with 99.97% accuracy"</p>
                    <p><strong>— Multi-State Medicaid MCO</strong></p>
                </div>
            </div>
            <div class="col-md-4">
                <div class="testimonial">
                    <p>"Went from contract signed to first claim in 47 minutes"</p>
                    <p><strong>— Medicare Advantage Plan</strong></p>
                </div>
            </div>
        </div>
    </div>
</section>

<!-- Signup Section with Stripe -->
<section id="signup" class="signup-section">
    <div class="container">
        <h2 class="text-center mb-4">Sign Up and Start Today</h2>
        <p class="text-center mb-5">Secure billing powered by Stripe. Choose your plan and get instant access.</p>
        <EditForm Model="signupModel" OnValidSubmit="HandleSignup">
            <div class="row justify-content-center">
                <div class="col-md-6">
                    <div class="mb-3">
                        <label for="email" class="form-label">Email Address</label>
                        <InputText id="email" class="form-control" @bind-Value="signupModel.Email" />
                    </div>
                    <div class="mb-3">
                        <label for="password" class="form-label">Password</label>
                        <InputText id="password" type="password" class="form-control" @bind-Value="signupModel.Password" />
                    </div>
                    <div class="mb-3">
                        <label for="plan" class="form-label">Select Plan</label>
                        <InputSelect id="plan" class="form-select" @bind-Value="signupModel.Plan">
                            <option value="basic">Basic ($29/month)</option>
                            <option value="pro">Pro ($99/month)</option>
    ...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

*This pull request was created from Copilot chat.*
>

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Copilot AI and others added 2 commits February 10, 2026 16:28
Co-authored-by: aurelianware <194855645+aurelianware@users.noreply.github.com>
Co-authored-by: aurelianware <194855645+aurelianware@users.noreply.github.com>
Copilot AI changed the title [WIP] Update Welcome page with modern design Redesign Welcome page with Bootstrap-based layout Feb 10, 2026
Copilot AI requested a review from aurelianware February 10, 2026 16:32
@aurelianware
Copy link
Owner

@copilot can you fix the checks that are failing

…ite assets

Co-authored-by: aurelianware <194855645+aurelianware@users.noreply.github.com>
@aurelianware aurelianware marked this pull request as ready for review February 10, 2026 16:47
Copilot AI review requested due to automatic review settings February 10, 2026 16:47
…branch variable

Co-authored-by: aurelianware <194855645+aurelianware@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 10, 2026

@copilot can you fix the checks that are failing

Fixed all failing checks in commits:

EDI Validation (79eaeb4): Added support for transaction type 276 (Claim Status Inquiry) to the EDI validator script. The test file test-x12-276-claim-status-request.edi was causing validation failures because 276 wasn't in the list of supported transaction types.

Docker Build (4d89fc1): Fixed invalid Docker tag format by changing from type=sha,prefix={{branch}}- to type=sha,prefix=sha-. The {{branch}} variable was resolving to empty in PR context, creating invalid tags like :-ad32f4b.

All checks should now pass on the next workflow run.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes the portal Welcome page using a Bootstrap-based layout, updates supporting styles/scripts to render the new design correctly, and fixes CI by extending the EDI X12 validator to recognize 276 (Claim Status Inquiry) transactions.

Changes:

  • Redesign Welcome.razor into a Bootstrap grid layout with hero/features/testimonials/signup sections.
  • Simplify/repair Welcome.razor.css and add Bootstrap CSS/JS includes in _Host.cshtml.
  • Extend scripts/validate-edi-x12.ps1 to support transaction type 276 and refresh generated site assessment output.

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
portal/CloudHealthOffice.Portal/Pages/Welcome.razor Replaces Welcome page markup and adds a signup form placeholder.
portal/CloudHealthOffice.Portal/Pages/Welcome.razor.css Rewrites page-specific styles to match the new layout.
portal/CloudHealthOffice.Portal/Pages/_Host.cshtml Adds Bootstrap resources via CDN for styling (and JS bundle).
scripts/validate-edi-x12.ps1 Adds 276 to allowed/detected transaction types and updates related messaging.
site/assessment.html Updates external links (Calendly/target attributes) in generated HTML.
package-lock.json Updates dependency lock metadata.

Comment on lines +102 to +105
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<InputText id="password" type="password" class="form-control" @bind-Value="signupModel.Password" />
</div>
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This collects a password but the handler is a placeholder and does not create an account; that’s a security/UX risk (users may believe they’ve registered). Either remove the password field until real signup exists, or wire this form to the actual auth/Stripe onboarding flow and clearly communicate what will happen on submit.

Copilot uses AI. Check for mistakes.
Comment on lines +26 to +30
.testimonial {
padding: 2rem;
background: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These testimonial card styles use a white background and light-theme shadowing, but branding guidelines specify absolute black backgrounds for surfaces with neon accents. Adjust the testimonial styling to match the established palette (docs/BRANDING-GUIDELINES.md) to avoid inconsistent UI across the portal.

Copilot uses AI. Check for mistakes.
Comment on lines +136 to +138
// This is a placeholder; implement actual signup logic
Console.WriteLine($"Signing up with Email: {signupModel.Email}, Plan: {signupModel.Plan}");
}
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid writing signup information (email/plan) to Console from a server-side app; it can leak PII into logs. Use the app’s structured logging (ILogger) with appropriate redaction, or remove this log line in favor of real signup handling.

Copilot uses AI. Check for mistakes.
Comment on lines +45 to 48
.signup-section {
background: #f8f9fa;
padding: 4rem 2rem;
}
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The signup section uses a light gray background; branding guidelines specify absolute black backgrounds and neon accents. Consider updating this section’s colors to match docs/BRANDING-GUIDELINES.md for consistent portal branding.

Copilot uses AI. Check for mistakes.
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<script src="https://js.stripe.com/v3/"></script>
<script src="/js/stripe-handler.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bootstrap’s JS bundle is added globally, but there are no Bootstrap JS components in the portal (no data-bs-* usage). If you only need layout/styles, omit the JS bundle to reduce payload and avoid potential JS/CSS interactions; add it later only if/when you introduce Bootstrap interactive widgets.

Suggested change
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

Copilot uses AI. Check for mistakes.
Comment on lines +132 to +137
private async Task HandleSignup()
{
// TODO: Integrate with Stripe API here
// For example, use JS Interop to call Stripe.js or server-side creation of Checkout Session
// This is a placeholder; implement actual signup logic
Console.WriteLine($"Signing up with Email: {signupModel.Email}, Plan: {signupModel.Plan}");
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HandleSignup is marked async but has no await, which produces a compiler warning and adds unnecessary overhead. Either remove async/return Task.CompletedTask, or add real awaited async work (e.g., calling a signup endpoint / JS interop).

Suggested change
private async Task HandleSignup()
{
// TODO: Integrate with Stripe API here
// For example, use JS Interop to call Stripe.js or server-side creation of Checkout Session
// This is a placeholder; implement actual signup logic
Console.WriteLine($"Signing up with Email: {signupModel.Email}, Plan: {signupModel.Plan}");
private Task HandleSignup()
{
// TODO: Integrate with Stripe API here
// For example, use JS Interop to call Stripe.js or server-side creation of Checkout Session
// This is a placeholder; implement actual signup logic
Console.WriteLine($"Signing up with Email: {signupModel.Email}, Plan: {signupModel.Plan}");
return Task.CompletedTask;

Copilot uses AI. Check for mistakes.
<div class="col-md-6">
<div class="mb-3">
<label for="email" class="form-label">Email Address</label>
<InputText id="email" class="form-control" @bind-Value="signupModel.Email" />
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The email field is rendered as a plain text input. Use an email input type (and ideally autocomplete) so browsers can validate and provide the correct keyboard/UI (especially on mobile).

Suggested change
<InputText id="email" class="form-control" @bind-Value="signupModel.Email" />
<InputText id="email"
type="email"
autocomplete="email"
class="form-control"
@bind-Value="signupModel.Email" />

Copilot uses AI. Check for mistakes.
<li><p><strong>Schedule Demo</strong></p>
<ul>
<li><a href="https://portal.cloudhealthoffice.com/contact-sales">Schedule platform walkthrough</a></li>
<li><a href="https://calendly.com/mark-cloudhealthoffice">Book 30-minute platform walkthrough</a></li>
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This external Calendly link doesn’t set target="_blank" and rel="noopener noreferrer" like other external links in this document. For consistency and to avoid reverse-tabnabbing risks, add those attributes here as well (or make external-link handling consistent across the page).

Suggested change
<li><a href="https://calendly.com/mark-cloudhealthoffice">Book 30-minute platform walkthrough</a></li>
<li><a href="https://calendly.com/mark-cloudhealthoffice" target="_blank" rel="noopener noreferrer">Book 30-minute platform walkthrough</a></li>

Copilot uses AI. Check for mistakes.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot please remove the Calendly link

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed Calendly link in commit 854d4e1.

Comment on lines 2 to 6
.hero {
background: linear-gradient(135deg, #000000 0%, #1a1a1a 50%, #000000 100%);
padding: 6rem 2rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 5rem 2rem;
text-align: center;
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The hero styling uses a purple gradient, which conflicts with the repository branding guidelines (absolute black backgrounds and neon accents). Consider aligning these hero styles with docs/BRANDING-GUIDELINES.md (e.g., #000 background and neon cyan/green accents) to keep portal branding consistent.

Copilot uses AI. Check for mistakes.
<div class="col-md-4 text-center">
<div class="feature-icon">📎</div>
<h4>Claim Attachments</h4>
<p>275/276/277 unsolicited and solicited attachments, FHIR integration, and automated delivery.</p>
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The “Claim Attachments” feature text lists transaction 276, but 276 is a Claim Status Inquiry (not an attachment transaction). This is misleading and duplicates the separate “Claim Status” feature; update the attachments line to reflect the correct transaction set(s) (e.g., 275 for attachments).

Suggested change
<p>275/276/277 unsolicited and solicited attachments, FHIR integration, and automated delivery.</p>
<p>275 claim attachments (unsolicited and solicited), FHIR integration, and automated delivery.</p>

Copilot uses AI. Check for mistakes.
@aurelianware
Copy link
Owner

@copilot apply changes based on the comments in this thread

@aurelianware
Copy link
Owner

@copilot can you fix the failing checks? there are a couple more failed checks

…ments

Co-authored-by: aurelianware <194855645+aurelianware@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 10, 2026

@copilot apply changes based on the comments in this thread

Applied all code review feedback in commit d06f943:

Security & UX:

  • Removed password field from signup form (not connected to real auth yet)
  • Added DataAnnotations validation with proper error messages
  • Changed email input to type="email" with autocomplete attribute
  • Removed Console.WriteLine to prevent PII leaks
  • Fixed async method to return Task.CompletedTask

Branding (Sentinel Theme):

  • Updated hero to absolute black background (#000000) with neon cyan/magenta gradients
  • Added Sentinel logo to hero section
  • Updated testimonials to dark cards (#0a0a0a) with neon cyan borders and glow effects
  • Updated signup section to dark theme (#0a0a0a) with neon accents
  • All headings now use neon cyan (#00ffff) with glow text-shadow
  • Form inputs use dark backgrounds with neon borders

Content:

  • Fixed claim attachments text (removed 276, now only mentions 275)
  • Added target="_blank" rel="noopener noreferrer" to Calendly link

Performance:

  • Removed Bootstrap JS bundle (only using CSS for layout)

Updated Welcome Page with Sentinel Branding

Copilot AI changed the title Redesign Welcome page with Bootstrap-based layout Redesign Welcome page with Sentinel branding and Bootstrap layout Feb 10, 2026
…lendly link

Co-authored-by: aurelianware <194855645+aurelianware@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 10, 2026

@copilot can you fix the failing checks? there are a couple more failed checks

Fixed PHI validation check in commit 854d4e1:

Issue: PHI redaction validator flagged admin@demohealthplan.com in scripts/seed-demo-tenant.json as potential real PHI.

Fix: Changed to admin@example.com (example.com is in the allowed domains list).

All checks should now pass on the next workflow run.

@aurelianware aurelianware merged commit 49f3fe3 into main Feb 10, 2026
13 of 14 checks passed
@aurelianware aurelianware deleted the copilot/update-welcome-page-design branch February 10, 2026 17:39
aurelianware added a commit that referenced this pull request Mar 8, 2026
…-design

Redesign Welcome page with Sentinel branding and Bootstrap layout
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants